package com.plug.service;

import com.plug.entity.PlugContrast;
import com.plug.entity.PlugDatasource;
import com.plug.entity.PlugOperationRecord;
import com.plug.entity.PlugRecord;
import org.apache.ibatis.annotations.Param;
import org.springframework.dao.DataAccessException;

import java.sql.SQLException;
import java.util.List;
import java.util.Map;

/**
 * Created by admin on 2016/12/19.
 */
public interface IPlugRecordService {

    /**
     * 新增操作对比记录
     * @param plugRecordList
     * @param plugOperationRecord
     * @return
     */
    int saveRecordAndOperation(List<PlugRecord> plugRecordList,PlugOperationRecord plugOperationRecord) throws Exception;


    List<String> findHistoryColumn(PlugDatasource plugDatasource, String tableName, String column) throws Exception;

    List<Map<String, Object>> findByOperationAll(int offset,int limit);

    List<PlugRecord> findAll(int offset,int limit);

    Map<String, Object> findTableStrut(PlugDatasource plugDatasource,String tableName) throws Exception;

    PlugOperationRecord findByID(String id);

    int findTotal();

    List<String> findTableColumn(PlugDatasource plugDatasource, String tableName) throws Exception;

    List<PlugRecord> findByIDAll(String crId);

    List<PlugRecord> findByOperationId(String crId,int offset,int limit);

    int findByOperationIdTotal(String crId);

    /**
     * 根据条件查询起始ID
     * @param plugDatasource 数据源对象
     * @param tableName 表名
     * @param offset 开始位置
     * @param limit 结束位置
     * @param column 查询列名
     * @param sort 排序方式
     * @param plugContrast 任务配置对象
     * @return
     */
    Long[] getMaxAndMinIndex(PlugDatasource plugDatasource, String tableName,Integer offset, Integer limit,String column,String sort,PlugContrast plugContrast) throws Exception;

    /**
     * 根据条件查询起始ID
     * @param plugDatasource 数据源对象
     * @param tableName 表名
     * @param column 查询列名
     * @param sort 排序方式
     * @param timeColumn 时间列
     * @param columnType 时间类型
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param plugContrast 任务配置对象
     * @return
     */
    Long[] getMaxAndMinIndex(PlugDatasource plugDatasource, String tableName,
                             String column,String sort,String timeColumn,String columnType,
                             String startTime,String endTime,PlugContrast plugContrast) throws Exception;

    /**
     * 根据数据库别名、数据表名数据
     * @param plugDatasource 数据库名称
     * @param tableName 数据表名
     * @param primaryKey  主键开始位置
     * @param column 查询列名称
     * @param sort 排序方式
     * @param plugContrast 任务配置对象
     * @return
     */
    Map<String,Map<String, Object>> findHistoryRecord(PlugDatasource plugDatasource, String tableName,Long primaryKey,String column,String sort,PlugContrast plugContrast) throws Exception;

    /**
     *
     * @param plugDatasource 数据库名称
     * @param tableName 数据表名
     * @param primaryKey 主键开始位置
     * @param timeColumn 时间列
     * @param columnType 时间列类型
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param plugContrast 任务配置对象
     * @param isTime 是否是根据时间查询
     * @return
     */
    Long findHistoryRecordTotal(PlugDatasource plugDatasource, String tableName,Long primaryKey,String timeColumn,String columnType,
                                String startTime,String endTime,PlugContrast plugContrast,Boolean isTime) throws Exception;

    /**
     根据数据库别名、数据表名数据
     * @param plugDatasource 数据库名称
     * @param tableName 数据表名
     * @param column 查询列名称
     * @param sort 排序方式
     * @param plugContrast 任务配置对象
     * @return
     */
    Map<String,Map<String, Object>> findHistoryRecord(PlugDatasource plugDatasource, String tableName,Long[] index,String column,String sort,PlugContrast plugContrast) throws Exception;


    /**
     * 多线程分批次对比
     * @param plugDatasource 数据库名称
     * @param tableName 数据表名
     * @param index 起始ID
     * @param column 查询列名称
     * @param plugContrast 任务配置对象
     * @param offset 分页开始位
     * @param limit 分页结束位
     * @return
     * @throws Exception
     */
    Map<String,Map<String, Object>> findHistoryRecord(PlugDatasource plugDatasource, String tableName,Long[] index,String column,
                                                      PlugContrast plugContrast) throws Exception;

    /**
     根据数据库别名、数据表名数据
     * @param plugDatasource 数据库名称
     * @param tableName 数据表名
     * @param offset 起始条数位置
     * @param limit 对比条数
     * @param column 查询列名称
     * @param plugContrast 任务配置对象
     * @return
     */
    Map<String,Map<String, Object>> findHistoryRecord(PlugDatasource plugDatasource, String tableName,int offset, int limit,String column,PlugContrast plugContrast) throws Exception;


    /**
     * 根据数据库别名、数据表名数据
     * @param plugDatasource 数据库
     * @param tableName 数据表名
     * @param column 查询列名称
     * @param index 主键开始结束位置数组
     * @param plugContrast 任务配置对象
     * @return
     * @throws Exception
     */
    Map<String,Map<String, Object>> findHistoryRecord(PlugDatasource plugDatasource, String tableName,
                                                      String column,Long[] index,PlugContrast plugContrast) throws Exception;
}
